package com.taikang.system.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;

import com.taikang.system.entity.SysRegion;
import com.taikang.system.dto.SysRegionCondition;

@Repository("sysRegionDaoImpl")
public interface ISysRegionDao {
	
	/**
	 * 查询所有省份
	 * @return
	 */
	List<SysRegion> listProvinceAll();

	/**
	 * 查询区间数据
	 * @param bounds RowBounds对象
	 * @param condition 查询条件类
	 */
	List<SysRegion> listSysRegionByPage(RowBounds bounds, @Param("condition") SysRegionCondition condition);
	/**
	 * 查询区间数据
	 * @param bounds RowBounds对象
	 * @param condition 查询条件类
	 */
	List<SysRegion> listSysRegionAreaDetailByPage(RowBounds bounds, @Param("condition") SysRegionCondition condition);
	
	/**
	 * 查询适应门店
	 * @param condition
	 * @return
	 */
	List<SysRegion> listSysRegionsByCondition(@Param("condition") SysRegionCondition condition);
	
	/**
	 * 查询所有区域
	 * @return
	 */
	List<SysRegion> listSysRegionAll();
	
	/**
	 * 根据条件查询所有区域
	 * @return
	 */
	List<SysRegion> listSysRegionAllByCondition(@Param("condition") SysRegionCondition condition);

	/**
	 * 通过父类条件得到下属级别的信息
	 * @param parentId
	 * @return
	 */
	List<SysRegion> listSysregionByCondition(@Param("condition") SysRegionCondition condition);
	
	/**
	 * 通过父类ID得到子类的ID
	 * @param id
	 * @return
	 */
	List<Long> listSysRegionByParentId(@Param("ids") List<Long> ids);
	/**
	 * 通过areaId查询
	 */
	List<SysRegion> listSysRegionByAreaId(@Param("areaId") String areaId);
	/**
	 * 查询总数
	 * @param condition 查询条件类
	 * @return 总条数
	 */
	int listSysRegionByPageCount(@Param("condition") SysRegionCondition condition);
	/**
	 * 查询总数
	 * @param condition 查询条件类
	 * @return 总条数
	 */
	int listSysRegionAreaDetailByPageCount(@Param("condition") SysRegionCondition condition);
	/**
	 * 通过父级ID得到所有的子类的数量
	 * @param parentId
	 * @return
	 */
	int getChildrenNumberByParentId(@Param("id") Long parentId);
	/**
	 * 根据ID查询
	 * @param id 主键
	 * @return 省市区基础表
	 */
	SysRegion getSysRegionById(@Param("id") Long id);
	/**
	 * 根据code查询城市
	 */
	SysRegion getSysRegionByCode(@Param("code") String code);
	/**
	 * 根据城市名字查询
	 */
	SysRegion getSysRegionByName(@Param("name") String name);
	
	/**
	 * 根据省市区查询
	 */
	SysRegion getSysRegionByAllName(@Param("name") String name);

	/**
	 * 新增
	 * @param item 省市区基础表
	 */
	void add(SysRegion item);

	/**
	 * 设置热门
	 */
	void setHot(@Param("ids") Long[] ids, @Param("status") Integer status);
	/**
	 * 批量设置区域
	 * @param ids
	 * @param areaId
	 */
	void batchFitArea(@Param("ids") Long[] ids, @Param("areaId") String areaId);
	/**
	 * 设置区域
	 * @param condition
	 */
	void fitArea(@Param("condition") SysRegionCondition condition);
	/**
	 * 移除设置的区域
	 * @param condition
	 */
	void removeArea(@Param("condition") SysRegionCondition condition);
	
	
	/**
	 * 批量的移除已经设置的区域
	 * @param ids
	 * @param areaId
	 */
	void batchRemoveArea(@Param("ids") Long[] ids);
	/**
	 * 修改
	 * @param item 省市区基础表
	 */
	void update(SysRegion item);
	
	/**
	 * 根据ID集合批量删除
	 * @param ids ID集合
	 */
	void delByIds(Long[] ids);

}

